#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Models.Marketmodels.Evolvers;
using Cephei.QL.Math;
namespace Cephei.QL.Models.Marketmodels
{
    /// <summary> 
	/// ! Engine collecting cash flows along a market-model simulation for doing pathwise computation of Deltas and vegas using Giles--Glasserman smoking adjoints method note only works with displaced LMM,  The method is intimately connected with log-normal Euler evolution  We must work with discretely compounding MM account To compute a vega means changing the pseudo-square root at each time step So for each vega, we have a vector of matrices. So we need a vector of vectors of matrices to compute all the vegas. We do the outermost vector by time step and inner one by which vega. This implementation is different in that all the linear combinations by the bumps are done as late as possible, whereas PathwiseVegasAccountingEngine does them as early as possible. This is tested in MarketModelTest::testPathwiseVegas
	/// </summary>
    [Guid ("9AD532EF-A6D7-493f-9C83-2CB8AC3F15E3"),ComVisible(true)]
	public interface IPathwiseVegasOuterAccountingEngine 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 IPathwiseVegasOuterAccountingEngine MultiplePathValues(Cephei.Core.IVector<Double> means, Cephei.Core.IVector<Double> errors, UInt64 numberOfPaths);
        /// <summary> 
		/// 
		/// </summary>
		 IPathwiseVegasOuterAccountingEngine MultiplePathValuesElementary(Cephei.Core.IVector<Double> means, Cephei.Core.IVector<Double> errors, UInt64 numberOfPaths);
    }   

    /// <summary> 
	/// ! Engine collecting cash flows along a market-model simulation for doing pathwise computation of Deltas and vegas using Giles--Glasserman smoking adjoints method note only works with displaced LMM,  The method is intimately connected with log-normal Euler evolution  We must work with discretely compounding MM account To compute a vega means changing the pseudo-square root at each time step So for each vega, we have a vector of matrices. So we need a vector of vectors of matrices to compute all the vegas. We do the outermost vector by time step and inner one by which vega. This implementation is different in that all the linear combinations by the bumps are done as late as possible, whereas PathwiseVegasAccountingEngine does them as early as possible. This is tested in MarketModelTest::testPathwiseVegas Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IPathwiseVegasOuterAccountingEngine_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

